# -*- coding: UTF-8 -*-
#Copyright (C) 2009 by Javier Castrillo
#
#This file is part of Pyagua
#
#Pyagua is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#The Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#Pyagua is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with Pyagua.  If not, see <http://www.gnu.org/licenses/>.


# Archivo menu.py

import pygame
from pygame.locals import *
from init import screen
import gettext 
import locale 
import os
import config

clock = pygame.time.Clock()
imagen_presentacion = pygame.image.load('imagenes/menu.jpg').convert()
imagen_creditos = pygame.image.load('imagenes/creditos.jpg').convert()
imagen_instrucciones = pygame.image.load('imagenes/instrucciones.jpg').convert()
sonido_menu = pygame.mixer.Sound('sonidos/menu.ogg')

def mostrarImagen(imagen, duracion):
    screen.blit(imagen, imagen.get_rect(center=screen.get_rect().center))
    ticks_final = pygame.time.get_ticks() + duracion * 1000

    while pygame.time.get_ticks() < ticks_final:
        pygame.display.flip()
        clock.tick(10)

class Menu:
    font = pygame.font.Font('fuentes/tip_menu.ttf', 48)
    fondo = pygame.image.load('imagenes/menu.jpg').convert()
    colorEncendido = (200,0,0)
    colorApagado = (0,0,0)
    seleccionado = 0

    def __init__(self, opciones):
        self.opciones = opciones
        self.actualizar()

    def actualizar(self):
        self.imagenes = []
        for texto, funcion in self.opciones:
            text = gettext.gettext(texto)
            #print texto, gettext.gettext(texto)
            imagen0 = self.font.render(text, 1, self.colorApagado)
            imagen1 = self.font.render(text, 1, self.colorEncendido)
            self.imagenes.append( [imagen0, imagen1] )
        self.dibujarFondo()
        self.dibujarOpciones()

    def dibujarOpciones(self):
        # Opciones del menú y separación de las mismas
        altura_de_opcion = 60
        # ubicación del menú
        x = 500
        y = 200
        
        for indice, imagenes in enumerate(self.imagenes):
            posicion = (x, y + altura_de_opcion * indice)
            area = imagenes[0].get_rect(topleft=posicion)
            screen.blit(self.fondo, posicion, area)

        for indice, imagenes in enumerate(self.imagenes):
            if indice == self.seleccionado:
                imagen = imagenes[1]
            else:
                imagen = imagenes[0]
            posicion = (x, y + altura_de_opcion * indice)
            screen.blit(imagen, posicion)
        pygame.display.flip()

    def moverSeleccion(self, direccion):
        self.seleccionado += direccion
        # procura que el cursor esté entre las opciones permitidas
        if self.seleccionado < 0:
            self.seleccionado = 0
        elif self.seleccionado > len(self.opciones) - 1:
            self.seleccionado = len(self.opciones) - 1
        sonido_menu.play() 
        self.dibujarOpciones()

    def dibujarFondo(self):
        screen.blit(self.fondo, (0, 0))

    def salirDelMenu(self):
        self.salir = True

    def run(self):
        # Elegir opciones dentro del menú principal
        self.salir = False
        while not self.salir:
            for event in pygame.event.get():
                if event.type == QUIT:
                    salir = True
            pressed_keys = pygame.key.get_pressed()
            if pressed_keys[K_UP]:
                self.moverSeleccion(-1)
            elif pressed_keys[K_DOWN]:
                self.moverSeleccion(1)
            elif pressed_keys[K_RETURN]:
                sonido_menu.play() 
                titulo, funcion = self.opciones[self.seleccionado]
                funcion()
                self.actualizar()
            pygame.display.flip()
            clock.tick(10)


class MenuPrincipal(Menu):
    def __init__(self):
        opciones = [
            (u'jugar', self.comenzar_nuevo_juego),
            (u'instrucciones', self.mostrar_opciones),
            (u'créditos', self.mostrar_creditos),
            (u'salir', self.salirDelMenu)
        ]
        Menu.__init__(self, opciones)

    def comenzar_nuevo_juego(self):
        lang = 'esp'
        import game
        game.main(lang)
 
    def mostrar_creditos(self):
        mostrarImagen(imagen_creditos, 10)

    def mostrar_opciones(self):
        mostrarImagen(imagen_instrucciones, 10)

    def salir_del_programa(self):
        import sys
        sys.exit(0)

def main():    
    pygame.mouse.set_visible(False)
    sonido_menu.play()
    MenuPrincipal().run()

if __name__ == '__main__':
    pygame.mixer.init()
    main()
